template<class T, unsigned int N = 1>
class Tablica
{
   std::vector<Tablica<T, N - 1> > _tab;
public:
   Tablica<T, N - 1>& operator [](unsigned int i)
   {
      if (_tab.size() <= i)
      {
         _tab.insert(_tab.end(), i - _tab.size() + 1, Tablica<T, N - 1>());
      }
      return _tab[i];
   }
};

template<class T> 
class Tablica<T, 1>
{
   std::vector<T> _tab;
public:
   T& operator [](unsigned int i)
   {
      if (_tab.size() <= i)
      {
         _tab.insert(_tab.end(), i - _tab.size() + 1, T());
      }

      return _tab[i];
   }

   void operator += ( T& element )
   {
	   _tab.push_back(element);
   }
   int size()
   {
	   return _tab.size();
   }
   bool empty()
   {
	   return _tab.empty();
   }	
};